/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.poli.utilidades;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.border.Border;

/**
 *
 * @author Andres Felipe Escobar Lopez
 */
public class AdapterPanel  implements Border{

    private Image bgImage;
    private BufferedImage image;
    private static AdapterPanel instance;

    /**
     * Un solo objeto en memoria
     *
     * @author Andres Felipe Escobar Lopez
     * @return
     */
    public static AdapterPanel getInstance(BufferedImage image) {

        if (instance == null) {
            instance = new AdapterPanel(image);
        }

        return instance;
    }

    public AdapterPanel( BufferedImage image) {

        this.image = image;

    }


    
    /**
     * Lo utilizaremos para establecerle su imagen de fondo.
     *
     * @param bgImage La imagen en cuestion
     */
    public void setBackgroundImage(Image bgImage) {
        this.bgImage = bgImage;
    }

    /**
     * Para recuperar una imagen de un archivo...
     *
     * @param path Ruta de la imagen relativa al proyecto
     * @return una imagen
     */
    public ImageIcon createImage(String path) {
        URL imgURL = getClass().getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("No existe la ruta de la imagen" + path);
            return null;
        }
    }

    
    public void paintImage(Graphics g,ImageIcon imagen,JPanel panel) {

        // Pintamos la imagen de fondo...
        if (imagen != null) {
            System.out.println("panel " + g + "image " + imagen);
            g.drawImage(imagen.getImage(), 0, 0, null);
        }
        // Y pintamos el resto de cosas que pueda tener el panel
        panel.paint(g);

    }

    @Override
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
    int x0 = x+ (width-image.getWidth())/2;
    int y0 = y+ (height-image.getHeight())/2;
        g.drawImage(image, x0, y0, null);
    }

    @Override
    public Insets getBorderInsets(Component c) {
        return new Insets(0, 0, 0, 0);
    }

    @Override
    public boolean isBorderOpaque() {
        return true;
    }
}
